package oj_qmfx.oj_21;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        //叶子结点编号开始
        int start = n / 2 + 1;
        //从第一个叶子结点开始遍历到最后一个叶子结点
        //例如本题 叶子结点从6-7-8-9-10
        for (int i = start; i <= n; i++) {   //i代表当前叶子节点
            //找叶子结点到跟的路径
            //为当前路径创建一个空的路径列表
            ArrayList<Integer> path = new ArrayList<>();

            int curInd = i;     //创建一个追踪索引，从当前叶子结点开始
            //追踪索引大于0，就一直遍历，向上寻找父节点
            while (curInd > 0){
            //先把当前节点加进路径
                path.add(curInd);
                //计算父节点 除2
                int parent = curInd / 2;
                curInd = parent;
            }

//            反向遍历路径列表
            for (int j = path.size() - 1; j >= 0; j--){
                System.out.print(path.get(j));
//                输出处理  如果不是最后一个，就在后面打印一个空格
                if (j != 0) System.out.print(" ");
            }

//            打印完一条路径，换行
            System.out.println();
        }
        sc.close();
    }
}